﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionePolveriLib.Facades;
using GestionePolveriLib.BL;
using ControlsLib;
using System.Data.Objects;

namespace GestionePolveri2
{
    public partial class ElencoPartite : Form, IForm
    {
        private string m_turno;
        private string m_impianto;

        public string Turno
        {
            get { return m_turno; }
        }

        public string Impianto
        {
            get { return m_impianto; }
        }

        public ElencoPartite()
        {
            InitializeComponent();
        }

        [Obsolete("Da non implementare, serve solo a rispettare l'interfaccia !")]
        public void InitializeForm()
        {
            throw new NotImplementedException("Da non implementare, serve solo a rispettare l'interfaccia !");
            #region
            //foreach (Control c in this.Controls) { c.Visible = false; }

            //PartiteFacade pf = new PartiteFacade();

            //pf.LoadAsync((result) =>
            //{
            //    if (result != null)
            //    {
            //        List<PartitaInfo> partite = ((List<PartitaInfo>)result).ToList();

            //        try
            //        {
            //            this.elencoPartiteItem1.POS = partite[0].POS.POSValue.ToString();
            //            this.elencoPartiteItem1.CodColore = partite[0].ColoreVerniciato.CodiceColore;
            //            this.elencoPartiteItem1.Descrizione = partite[0].ColoreVerniciato.Descrizione;
            //            this.elencoPartiteItem1.Status = partite[0].FlagConforme;
            //            this.elencoPartiteItem1.Visible = true;

            //            this.elencoPartiteItem2.POS = partite[1].POS.POSValue.ToString();
            //            this.elencoPartiteItem2.CodColore = partite[1].ColoreVerniciato.CodiceColore;
            //            this.elencoPartiteItem2.Descrizione = partite[1].ColoreVerniciato.Descrizione;
            //            this.elencoPartiteItem2.Status = partite[1].FlagConforme;
            //            this.elencoPartiteItem2.Visible = true;

            //            this.elencoPartiteItem3.POS = partite[2].POS.POSValue.ToString();
            //            this.elencoPartiteItem3.CodColore = partite[2].ColoreVerniciato.CodiceColore;
            //            this.elencoPartiteItem3.Descrizione = partite[2].ColoreVerniciato.Descrizione;
            //            this.elencoPartiteItem3.Status = partite[2].FlagConforme;
            //            this.elencoPartiteItem3.Visible = true;
            //        }
            //        catch
            //        {
            //        }
            //    }
            //    else
            //    {
            //        foreach (Control c in this.Controls) { c.Visible = false; }
            //        //MessageBox.Show("Non sono stati trovate Partite da visualizzare !", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            //    }
            //});
            #endregion
        }

        public void InitializeForm(string turno, string impianto, DateTime dataMovimento)
        {
            m_turno = turno;
            m_impianto = impianto;

            this.Text = string.Format("Elenco Partite: [{0} - {1} - {2}]", turno, impianto, dataMovimento);

            foreach (Control c in this.Controls) { c.Visible = false; }

            PartiteFacade pf = new PartiteFacade();

            pf.RunAsync<List<PartitaInfo>>(() => pf.GetReverse3Items(turno, impianto, dataMovimento), (result) =>
            {
                if (result != null)
                {
                    List<PartitaInfo> partite = ((List<PartitaInfo>)result).ToList();

                    try
                    {
                        this.elencoPartiteItem1.POS = partite[0].POS.POSValue.ToString();
                        this.elencoPartiteItem1.CodColore = partite[0].ColoreVerniciato.CodiceColore;
                        this.elencoPartiteItem1.Descrizione = partite[0].ColoreVerniciato.Descrizione;
                        this.elencoPartiteItem1.Status = partite[0].FlagConforme;
                        this.elencoPartiteItem1.Note = partite[0].Note;
                        this.elencoPartiteItem1.Operatore = partite[0].Operatore;
                        this.elencoPartiteItem1.Visible = true;
  
                        this.elencoPartiteItem2.POS = partite[1].POS.POSValue.ToString();
                        this.elencoPartiteItem2.CodColore = partite[1].ColoreVerniciato.CodiceColore;
                        this.elencoPartiteItem2.Descrizione = partite[1].ColoreVerniciato.Descrizione;
                        this.elencoPartiteItem2.Status = partite[1].FlagConforme;
                        this.elencoPartiteItem2.Note = partite[1].Note;
                        this.elencoPartiteItem2.Operatore = partite[1].Operatore;
                        this.elencoPartiteItem2.Visible = true;
   
                        this.elencoPartiteItem3.POS = partite[2].POS.POSValue.ToString();
                        this.elencoPartiteItem3.CodColore = partite[2].ColoreVerniciato.CodiceColore;
                        this.elencoPartiteItem3.Descrizione = partite[2].ColoreVerniciato.Descrizione;
                        this.elencoPartiteItem3.Status = partite[2].FlagConforme;
                        this.elencoPartiteItem3.Note = partite[2].Note;
                        this.elencoPartiteItem3.Operatore = partite[2].Operatore;
                        this.elencoPartiteItem3.Visible = true;
                    }
                    catch
                    {
                    }
                }
                else
                {
                    foreach (Control c in this.Controls) { c.Visible = false; }
                    //MessageBox.Show("Non sono stati trovate Partite da visualizzare !", "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }

            });
        }

        public void ShowOnMonitor(int monitor)
        {
            bool m_alreadyOpen = false;
            ElencoPartite m_ep = null;

            // che if the ElencoPartite form is already open for that combination of Turno + Impianto...
            foreach (Form f in Application.OpenForms)
            {
                if (f.Name == "ElencoPartite")
                {
                    m_ep = (ElencoPartite)f;

                    if ((m_ep.Turno == this.Turno) &&
                        (m_ep.Impianto == this.Impianto))
                    {
                        m_alreadyOpen = true;
                    }
                    break;
                }
            }

            if (!m_alreadyOpen)
            {
                Screen[] sc = Screen.AllScreens;

                this.WindowState = FormWindowState.Maximized;
                this.FormBorderStyle = FormBorderStyle.None;
                if (sc.Length == 1)
                {
                    monitor = 0;
                    this.WindowState = FormWindowState.Normal;
                    this.FormBorderStyle = FormBorderStyle.Sizable;
                }

                //get all the screen width and heights

                this.Left = sc[monitor].Bounds.Width;
                this.Top = sc[monitor].Bounds.Height;
                this.StartPosition = FormStartPosition.Manual;
                this.Location = sc[monitor].Bounds.Location;
                Point p = new Point(sc[monitor].Bounds.Location.X, sc[monitor].Bounds.Location.Y);
                this.Location = p;
                this.Show();
            }
            else
            {
                if (m_ep != null)
                {
                    m_ep.Show();
                }
            }

        }
    }
}
